// index.js
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
// 引入科目管理工具类
const subjectManager = require('../../utils/subject.js');
// 引入用户管理工具类
const userManager = require('../../utils/userManager.js');

Page({
  data: {
    navBarHeight: wx.getSystemInfoSync().statusBarHeight + 10,
    showSubjectModal: false, // 控制学科弹窗显示
    subjectList: [
      { id: 1, icon: "/images/u27.svg", name: "物理" },
      { id: 2, icon: "/images/u28.svg", name: "科学" },
      { id: 3, icon: "/images/u29.svg", name: "化学" },
      { id: 4, icon: "/images/u30.svg", name: "生物学" },
      { id: 5, icon: "/images/u31.svg", name: "数学" },
      { id: 6, icon: "/images/u32.svg", name: "政治" },
      { id: 7, icon: "/images/u33.svg", name: "文学" },
    ],
    selectedSubject: "物理", // 记录选中的学科，初始为物理
    selectedSubjectIcon: "/images/u27.svg",
    tempSelectedSubject: "物理", // 临时选中的学科（选择时更新）
    tempSelectedIcon: "/images/wuli.png",
    selectedSubjectId: 1, // 选中的学科ID
    isSelecting: false, // 防止重复选择

    gaokaoDate: new Date(2026, 6, 7, 0, 0, 0).getTime(),
    days: 0,
    hours: 0,
    minutes: 0,
    seconds: 0,
    userInfo: null, // 用户信息
    isLoggedIn: false, // 是否已登录
    userRoles: [], // 用户角色
    userPermissions: [], // 用户权限

    // 考试前沿数据
    examFrontierList: [],
    examFrontierLoading: false
  },

  formatNum(num) {
    return num.toString().padStart(2, '0');
  },

  // 打开学科选择弹窗
  openSubjectModal() {
    this.setData({
      showSubjectModal: true,
    });
  },

  // 关闭学科选择弹窗
  closeSubjectModal() {
    this.setData({
      showSubjectModal: false,
    });
  },

  // 选择学科
  chooseSubject(e) {
    const subjectId = e.currentTarget.dataset.id;
    const subjectName = e.currentTarget.dataset.name;
    const subjectIcon = e.currentTarget.dataset.icon;

    console.log('选择科目事件:', e);
    console.log('科目数据:', { subjectId, subjectName, subjectIcon });
    console.log('当前科目列表:', this.data.subjectList);

    // 验证数据有效性
    if (!subjectId || !subjectName) {
      console.error('科目数据无效:', { subjectId, subjectName });
      wx.showToast({
        title: '科目数据无效，请重试',
        icon: 'none'
      });
      return;
    }

    console.log('选择科目:', { subjectId, subjectName, subjectIcon });

    this.setData({
      tempSelectedSubject: subjectName,
      tempSelectedSubjectId: subjectId,
      tempSelectedIcon: subjectIcon
    });
  },

  // 确认选择学科
  confirmSubject() {
    const tempSelectedSubject = this.data.tempSelectedSubject;
    const tempSelectedSubjectId = this.data.tempSelectedSubjectId;
    const tempSelectedIcon = this.data.tempSelectedIcon;

    if (!tempSelectedSubject || !tempSelectedSubjectId) {
      wx.showToast({
        title: '请选择有效的学科',
        icon: 'none'
      });
      return;
    }

    console.log('确认选择科目:', {
      subject: tempSelectedSubject,
      id: tempSelectedSubjectId,
      icon: tempSelectedIcon
    });

    this.setData({
      selectedSubject: tempSelectedSubject,
      selectedSubjectId: tempSelectedSubjectId,
      selectedSubjectIcon: tempSelectedIcon,
      showSubjectModal: false
    });

    // 使用科目管理工具保存科目选择
    try {
      subjectManager.setSelectedSubject(tempSelectedSubjectId, tempSelectedSubject);
      console.log('科目选择已通过科目管理工具保存');
    } catch (e) {
      console.error('通过科目管理工具保存科目选择失败:', e);
      // 降级到直接保存到本地存储
      try {
        wx.setStorageSync('selectedSubjectId', tempSelectedSubjectId);
        wx.setStorageSync('selectedSubjectName', tempSelectedSubject);
        console.log('科目选择已降级保存到本地存储');
      } catch (e2) {
        console.error('降级保存科目选择到本地存储也失败:', e2);
      }
    }

    wx.showToast({
      title: `已选择${tempSelectedSubject}`,
      icon: 'success',
      duration: 1500
    });
  },

  // 根据学科名称获取对应图标
  getSubjectIcon(subjectName) {
    const iconMap = {
      '物理': '/images/u27.svg',
      '科学': '/images/u28.svg',
      '化学': '/images/u29.svg',
      '生物学': '/images/u30.svg',
      '数学': '/images/u31.svg',
      '政治': '/images/u32.svg',
      '文学': '/images/u33.svg'
    };
    return iconMap[subjectName] || '/images/u27.svg';
  },

  // 获取学科列表
  getSubjectList() {
    const { http } = require('../../utils/http');
    
    http.get('/ssh/subject/list')
      .then(res => {
        console.log('获取学科列表成功:', res);
        if (res && res.length > 0) {
          // 为每个学科添加图标
          const subjectsWithIcons = res.map(subject => ({
            ...subject,
            icon: this.getSubjectIcon(subject.name)
          }));

          this.setData({
            subjectList: subjectsWithIcons
          });

          // 使用科目管理工具初始化科目系统
          try {
            const currentSubject = subjectManager.initializeSubjectSystem(subjectsWithIcons);
            if (currentSubject) {
              // 更新页面数据以匹配科目管理工具的状态
              this.setData({
                selectedSubject: currentSubject.name,
                selectedSubjectId: currentSubject.id,
                selectedSubjectIcon: currentSubject.icon,
                tempSelectedSubject: currentSubject.name,
                tempSelectedSubjectId: currentSubject.id,
                tempSelectedIcon: currentSubject.icon
              });
              console.log('科目系统初始化完成，当前科目:', currentSubject.name, currentSubject.id);
            }
          } catch (e) {
            console.error('使用科目管理工具初始化科目系统失败:', e);
            // 降级到原来的逻辑
            this.updateSelectedSubjectIfNeeded(subjectsWithIcons);
          }
        }
      })
      .catch(err => {
        console.error('获取学科列表失败:', err);
        // 使用默认学科列表
        this.setDefaultSubjectList();
      });
  },

  /**
   * 检查并更新选中的科目（如果当前选中的科目不在新列表中）
   */
  updateSelectedSubjectIfNeeded(subjectsWithIcons) {
    const currentSubjectId = this.data.selectedSubjectId;
    const currentSubjectName = this.data.selectedSubject;
    
    // 检查当前选中的科目是否还在列表中
    const subjectExists = subjectsWithIcons.find(subject => 
      subject.id === currentSubjectId || subject.name === currentSubjectName
    );
    
    if (!subjectExists) {
      // 如果当前选中的科目不在新列表中，选择第一个科目
      const defaultSubject = subjectsWithIcons[0];
      this.setData({
        selectedSubject: defaultSubject.name,
        selectedSubjectId: defaultSubject.id,
        selectedSubjectIcon: defaultSubject.icon,
        tempSelectedSubject: defaultSubject.name,
        tempSelectedSubjectId: defaultSubject.id,
        tempSelectedIcon: defaultSubject.icon
      });
      
      // 更新本地存储
      wx.setStorageSync('selectedSubjectId', defaultSubject.id);
      wx.setStorageSync('selectedSubjectName', defaultSubject.name);
      
      console.log('更新选中科目为:', defaultSubject.name, defaultSubject.id);
    }
  },

  /**
   * 确保科目选择状态有效
   */
  ensureSubjectSelectionValid() {
    const currentSubjectId = this.data.selectedSubjectId;
    const currentSubjectName = this.data.selectedSubject;
    
    // 如果当前没有有效的科目选择，尝试从本地存储恢复
    if (!currentSubjectId || !currentSubjectName) {
      console.log('当前科目选择无效，尝试从本地存储恢复');
      this.initSubjectSelection();
      return;
    }
    
    // 检查科目是否在科目列表中
    const subjectList = this.data.subjectList;
    if (subjectList && subjectList.length > 0) {
      const subjectExists = subjectList.find(subject => 
        subject.id === currentSubjectId || subject.name === currentSubjectName
      );
      
      if (!subjectExists) {
        console.log('当前选中的科目不在科目列表中，重新初始化');
        this.initSubjectSelection();
      }
    }
  },

  // 设置默认学科列表
  setDefaultSubjectList() {
    const defaultSubjects = [
      { id: 1, name: '物理', icon: '/images/u27.svg' },
      { id: 2, name: '科学', icon: '/images/u28.svg' },
      { id: 3, name: '化学', icon: '/images/u29.svg' },
      { id: 4, name: '生物学', icon: '/images/u30.svg' },
      { id: 5, name: '数学', icon: '/images/u31.svg' },
      { id: 6, name: '政治', icon: '/images/u32.svg' },
      { id: 7, name: '文学', icon: '/images/u33.svg' }
    ];

    this.setData({
      subjectList: defaultSubjects
    });
    
    // 使用科目管理工具设置默认科目
    try {
      const currentSubject = subjectManager.initializeSubjectSystem(defaultSubjects);
      if (currentSubject) {
        // 更新页面数据以匹配科目管理工具的状态
        this.setData({
          selectedSubject: currentSubject.name,
          selectedSubjectId: currentSubject.id,
          selectedSubjectIcon: currentSubject.icon,
          tempSelectedSubject: currentSubject.name,
          tempSelectedSubjectId: currentSubject.id,
          tempSelectedIcon: currentSubject.icon
        });
        console.log('默认科目系统初始化完成，当前科目:', currentSubject.name, currentSubject.id);
      }
    } catch (e) {
      console.error('使用科目管理工具初始化默认科目系统失败:', e);
      // 降级到原来的逻辑
      this.setDefaultSelectedSubject();
    }
  },

  /**
   * 初始化科目选择（从本地存储恢复或使用默认值）
   */
  initSubjectSelection() {
    try {
      // 使用科目管理工具获取当前选中的科目
      const selectedSubject = subjectManager.getSelectedSubject();
      
      if (selectedSubject && selectedSubject.id && selectedSubject.name) {
        // 从科目管理工具恢复
        this.setData({
          selectedSubject: selectedSubject.name,
          selectedSubjectId: selectedSubject.id,
          selectedSubjectIcon: selectedSubject.icon,
          tempSelectedSubject: selectedSubject.name,
          tempSelectedSubjectId: selectedSubject.id,
          tempSelectedIcon: selectedSubject.icon
        });
        console.log('从科目管理工具恢复科目选择:', selectedSubject.name, selectedSubject.id);
      } else {
        // 使用默认科目
        this.setDefaultSelectedSubject();
      }
    } catch (e) {
      console.error('初始化科目选择失败:', e);
      this.setDefaultSelectedSubject();
    }
  },

  /**
   * 设置默认选中的科目
   */
  setDefaultSelectedSubject() {
    const defaultSubject = {
      name: '物理',
      id: 1,
      icon: '/images/u27.svg'
    };
    
    this.setData({
      selectedSubject: defaultSubject.name,
      selectedSubjectId: defaultSubject.id,
      selectedSubjectIcon: defaultSubject.icon,
      tempSelectedSubject: defaultSubject.name,
      tempSelectedSubjectId: defaultSubject.id,
      tempSelectedIcon: defaultSubject.icon
    });
    
    // 保存到本地存储
    wx.setStorageSync('selectedSubjectId', defaultSubject.id);
    wx.setStorageSync('selectedSubjectName', defaultSubject.name);
    
    console.log('设置默认科目:', defaultSubject.name, defaultSubject.id);
  },

  onLoad(options) {
    console.log('页面加载开始');
    
    this.calculateGaokaoCountdown();
    // 每隔 1 秒更新一次倒计时
    setInterval(() => {
      this.calculateGaokaoCountdown();
    }, 1000);
    
    // 获取用户信息
    this.getUserInfo();

    // 获取考试前沿数据
    this.loadExamFrontierList();

    // 初始化科目选择（从本地存储恢复或使用默认值）
    this.initSubjectSelection();
    
    // 获取学科列表
    this.getSubjectList();
    
    console.log('页面加载完成，初始科目列表:', this.data.subjectList);
  },

  /**
   * 获取用户信息
   */
  getUserInfo() {
    const currentUser = userManager.getCurrentUser();
    
    if (currentUser) {
      // 已登录，获取用户信息
      this.setData({
        userInfo: currentUser.userInfo,
        isLoggedIn: true,
        userRoles: currentUser.roles,
        userPermissions: currentUser.permissions
      });
      
      console.log('首页获取到用户信息:', currentUser.userInfo);
      console.log('用户角色:', currentUser.roles);
      console.log('用户权限:', currentUser.permissions);
      console.log('用户ID:', userManager.getUserId());
      console.log('用户名:', userManager.getUserName());
      console.log('是否管理员:', userManager.isAdmin());
    } else {
      // 未登录
      this.setData({
        userInfo: null,
        isLoggedIn: false,
        userRoles: [],
        userPermissions: []
      });
    }
  },

  /**
   * 加载考试前沿列表
   */
  loadExamFrontierList() {
    this.setData({ examFrontierLoading: true });

    wx.request({
      url: 'http://localhost:8080/hyg/examIntro/list',
      method: 'GET',
      data: {
        pageNum: 1,
        pageSize: 4  // 首页只显示4条
      },
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
        if (res.statusCode === 200 && res.data.code === 200) {
          const examList = res.data.rows || [];
          console.log('获取考试前沿数据成功:', examList);

          // 处理数据，参考examFrontier页面的方式
          const processedList = examList.map(item => ({
            id: item.id,
            title: this.cleanHtmlTags(item.title || item.content),
            content: this.cleanHtmlTags(item.content),
            date: this.formatDate(item.createTime),
            imageUrl: item.imageUrl || '/images/makesi.jpg',
            createTime: item.createTime,
            fullContent: item.content
          }));

          this.setData({
            examFrontierList: processedList
          });
        } else {
          console.error('获取考试前沿数据失败:', res.data);
          // 如果接口失败，使用默认数据
          this.setDefaultExamFrontierData();
        }
      },
      fail: (err) => {
        console.error('获取考试前沿数据失败:', err);
        // 如果接口失败，使用默认数据
        this.setDefaultExamFrontierData();
      },
      complete: () => {
        this.setData({ examFrontierLoading: false });
      }
    });
  },

  /**
   * 格式化日期
   */
  formatDate(dateStr) {
    if (!dateStr) return '';
    
    try {
      const date = new Date(dateStr);
      const year = date.getFullYear();
      const month = String(date.getMonth() + 1).padStart(2, '0');
      const day = String(date.getDate()).padStart(2, '0');
      return `${year}.${month}.${day}`;
    } catch (e) {
      return dateStr;
    }
  },

  /**
   * 清理HTML标签
   */
  cleanHtmlTags(html) {
    if (!html) return '';
    // 使用正则表达式移除所有HTML标签
    return html.replace(/<[^>]*>/g, '');
  },

  /**
   * 设置默认的考试前沿数据（当接口失败时使用）
   */
  setDefaultExamFrontierData() {
    const defaultData = [
      {
        id: 1,
        title: '2025年全国硕士研究生招生考试公告及政策解读',
        content: '2025年全国硕士研究生招生考试公告及政策解读',
        date: '2025.01.15',
        imageUrl: '/images/makesi.jpg',
        createTime: '2025-01-15'
      },
      {
        id: 2,
        title: '最新考研政策变化及备考建议',
        content: '最新考研政策变化及备考建议',
        date: '2025.01.14',
        imageUrl: '/images/makesi.jpg',
        createTime: '2025-01-14'
      },
      {
        id: 3,
        title: '各高校招生计划及专业调整信息',
        content: '各高校招生计划及专业调整信息',
        date: '2025.01.13',
        imageUrl: '/images/makesi.jpg',
        createTime: '2025-01-13'
      },
      {
        id: 4,
        title: '考研报名流程及注意事项详解',
        content: '考研报名流程及注意事项详解',
        date: '2025.01.12',
        imageUrl: '/images/makesi.jpg',
        createTime: '2025-01-12'
      }
    ];

    this.setData({
      examFrontierList: defaultData
    });
  },

  /**
   * 跳转到考试前沿详情页
   */
  goToExamFrontierDetail(e) {
    const id = e.currentTarget.dataset.id;
    if (id) {
      wx.navigateTo({
        url: `/index/pages/examFrontierDetail/examFrontierDetail?id=${id}`
      });
    }
  },

  /**
   * 从服务器获取用户信息
   */
  fetchUserInfoFromServer() {
    const { http } = require('../../utils/http');
    
    http.get('/dev-api/getInfo')
      .then(res => {
        console.log('获取用户信息成功:', res);
        // 更新本地存储的用户信息
        wx.setStorageSync('userInfo', res);
        // 更新页面数据
        this.setData({
          userInfo: res
        });
      })
      .catch(err => {
        console.error('获取用户信息失败:', err);
        // 如果获取失败，可能token过期，跳转到登录页
        if (err.code === 401) {
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none'
          });
          // 清除登录信息
          wx.removeStorageSync('token');
          wx.removeStorageSync('userInfo');
          this.setData({
            userInfo: null,
            isLoggedIn: false
          });
        }
      });
  },

  calculateGaokaoCountdown() {
    const now = new Date().getTime();
    const distance = this.data.gaokaoDate - now;
    if (distance <= 0) {
      this.setData({
        days: 0,
        hours: 0,
        minutes: 0,
        seconds: 0
      });
      return;
    }
    const days = Math.floor(distance / (1000 * 60 * 60 * 24));
    const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((distance % (1000 * 60)) / 1000);

    this.setData({
      days: days,
      hours: this.formatNum(hours),
      minutes: this.formatNum(minutes),
      seconds: this.formatNum(seconds)
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次页面显示时都重新获取用户信息
    this.getUserInfo();
    
    // 确保科目选择状态正确
    this.ensureSubjectSelectionValid();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 跳转到一日一练页面
   */
  goToDailyPractice() {
    wx.navigateTo({
      url: '/index/pages/dailyPractice/dailyPractice'
    });
  },

  /**
   * 处理菜单点击事件
   */
  handleMenu(e) {
    console.log('菜单点击事件:', e);
    const text = e.currentTarget.dataset.text;
    const subjectId = this.data.selectedSubjectId;
    const subjectName = this.data.selectedSubject;
    
    console.log('当前科目信息:', { subjectId, subjectName });
    
    // 验证科目ID是否有效
    if (!subjectId) {
      console.error('科目ID无效，尝试从科目管理工具恢复');
      // 尝试从科目管理工具恢复科目选择
      const selectedSubject = subjectManager.getSelectedSubject();
      
      if (selectedSubject && selectedSubject.id && selectedSubject.name) {
        console.log('从科目管理工具恢复科目:', selectedSubject.name, selectedSubject.id);
        // 更新页面数据
        this.setData({
          selectedSubject: selectedSubject.name,
          selectedSubjectId: selectedSubject.id,
          selectedSubjectIcon: selectedSubject.icon
        });
        
        // 使用恢复的科目ID
        const validSubjectId = selectedSubject.id;
        
        // 根据菜单文本跳转到对应页面
        this.navigateToPage(text, validSubjectId);
      } else {
        wx.showToast({
          title: '请先选择科目',
          icon: 'none'
        });
        // 打开科目选择弹窗
        this.openSubjectModal();
      }
      return;
    }
    
    // 科目ID有效，直接跳转
    this.navigateToPage(text, subjectId);
  },

  /**
   * 根据菜单类型和科目ID跳转到对应页面
   */
  navigateToPage(text, subjectId) {
    console.log('跳转页面:', { text, subjectId });
    
    switch(text) {
      case '一日一练':
        wx.navigateTo({
          url: '/index/pages/dailyPractice/dailyPractice'
        });
        break;
      case '免费刷题':
      case '模拟考试':
      case '历年真题':
        // 所有题库相关页面都跳转到同一个题库展示页面，但传递不同的类型参数
        let type = 'OFFICIAL'; // 默认类型
        let pageTitle = '免费刷题';
        
        if (text === '模拟考试') {
          type = 'CUSTOM';
          pageTitle = '模拟考试';
        } else if (text === '历年真题') {
          type = 'EXCLUSIVE';
          pageTitle = '历年真题';
        }
        
        // 跳转到题库展示页面，传递学科ID、类型和页面标题
        wx.navigateTo({
          url: `/index/pages/freeQuizzes/freeQuizzes?subjectId=${subjectId}&type=${type}&pageTitle=${pageTitle}`
        });
        break;
      case '我的笔记':
        wx.navigateTo({
          url: '/my/pages/Note/Note'
        });
        break;
      case '免费资料':
        wx.navigateTo({
          url: '/index/pages/freeResources/freeResources'
        });
        break;
      case '考试前沿':
        wx.navigateTo({
          url: '/index/pages/examFrontier/examFrontier'
        });
        break;
      case '每日打卡':
        wx.navigateTo({
          url: '/index/pages/dailyCard/dailyCard'
        });
        break;
      default:
        console.log('Unknown menu item:', text);
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  /**
   * 跳转到客服页面
   */
  goToCustomerService() {
    wx.navigateTo({
      url: '/my/pages/Call/Call',
      fail: (err) => {
        console.error('跳转客服页面失败:', err);
        wx.showToast({
          title: '跳转失败，请重试',
          icon: 'none',
          duration: 2000
        });
      }
    });
  }
})
